package com.xiangxg.jvm.gc;
/*
82集
-verbose:gc -Xmx200m -Xmn50m -XX:TargetSurvivorRatio=60 -XX:+PrintTenuringDistribution -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxTenuringThreshold=3 -XX:SurvivorRatio=8
当survivor空间存活的对象占据的空间已经达到survivor本身的60%，那么这时候就会重新计算对象晋升的
阈值，而不会使用之前显示配置的MaxTenuringThreshold的值。比如一个survivor的大小是10M，当
survivor中存活的对象的大小达到6M时，就会重新计算对象晋升的阈值
-XX:TargetSurvivorRatio=60

打印对象在survivor空间中对象的年龄分布
-XX:+PrintTenuringDistribution

打印GC的时间戳
-XX:PrintGCDateStamps
 */
public class MyTest4 {
    public static void main(String[] args) throws Exception{
        //下面两行代码不会被GC回收，会在From survior 和 To survivor 来回存放
        //如下每执行一次myGc()方法会触发一次垃圾回收，如下两个字节数据年龄会增加
        byte[] byte_1 = new byte[512 * 1024];
        byte[] byte_2 = new byte[512 * 1024];

        //每执行一次
        myGc();
        Thread.sleep(1000);
        System.out.println("1111111");

        myGc();
        Thread.sleep(10000);
        System.out.println("2222222");

        myGc();
        Thread.sleep(10000);
        System.out.println("3333333");

        myGc();
        Thread.sleep(10000);
        System.out.println("4444444");

        byte[] byte_3 = new byte[1024 * 1024];
        byte[] byte_4 = new byte[1024 * 1024];
        byte[] byte_5 = new byte[1024 * 1024];

        myGc();
        Thread.sleep(10000);
        System.out.println("555555");

        myGc();
        Thread.sleep(10000);
        System.out.println("6666666");

        System.out.println("hello world");
    }

    /**
     * gc会回收
     */
    private static void myGc(){
        for (int i = 0; i < 40; i++) {
            byte[] byte_1 = new byte[1024 * 1024];

        }
    }
}
